package com.superarai.util.text;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringUtil extends org.seasar.framework.util.StringUtil {

	public static String replacePlaceHolder(String text, String... replaceText) {
		// 入力チェック
		if (text == null || replaceText == null) {
			throw new NullPointerException();
		}

		int count = 0;
		int replaceTextLength = replaceText.length;
		StringBuilder replaceHolder = new StringBuilder();
		String resultText = text;

		// 置換する。
		while (true) {
			// 引数よりプレースホルダーの数が多かったら例外を発生させる。
			if (replaceTextLength < count + 1) {
				throw new IllegalArgumentException("置換する文字列に対して、引数が足りません。");
			}

			// 正規表現文字列を作成
			replaceHolder.delete(0, replaceHolder.length());
			replaceHolder.append("\\{");
			replaceHolder.append(count);
			replaceHolder.append("\\}");

			Pattern pattern = Pattern.compile(replaceHolder.toString());
			Matcher matcher = pattern.matcher(resultText);

			if (matcher.find()) {
				String replacement = replaceText[count];
				// 置換文字列にnullが含まれている場合、例外を発生させる。
				if (replacement == null) {
					throw new NullPointerException("replaceText[" + count + "] is null");
				}
				resultText = matcher.replaceAll(replacement);
				count++;
			} else {
				break;
			}
		}
		return resultText;
	}
}
